package com.rabbitmq.sendmessagelate.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.CustomExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class RabbitMqConfig {
    //队列名
    public static final String QUEUE_NAME = "javaboy_delay_queue";

    //交换机名称
    public static final String EXCHANGE_NAME = "javaboy_delay_exchange";

    //交换机类型
    public static final String EXCHANGE_TYPE = "x-delayed-message";

    @Bean
    public Queue queue(){
        return new Queue(QUEUE_NAME,true,false,false);
    }

    /**
     * 这块需要注意点
     * @return
     */
    @Bean
    public CustomExchange customExchange(){
        Map<String,Object> params=new HashMap<>();
        params.put("x-delayed-type","direct");
        /**
         * 第一个表示为交换机名称
         * 第二个表示为交换机类型
         * 第三个表示为持久化
         * 第四个表示为如果没有其他的增加列表的话，那么就会自动删除
         */
        return new CustomExchange(EXCHANGE_NAME,EXCHANGE_TYPE,true,false,params);
    }

    @Bean
    public Binding binding(){
        return BindingBuilder
                //这个表示为队列
                .bind(queue())
                //这个表示为交换机，用于充当为延迟队列
                .to(customExchange())
                .with(QUEUE_NAME)
                .noargs();
    }

}
